<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
</body>
</html>
<script>
// 英文：
  // fix: 修理 、 修复  ；  

function Author(name, home) {
  this.name = name;
  this.home = home;

  // 缺陷：每 new 出一个 作者对象，该对象里面的 方法 是重复（浪费内存）
    // 希望：每个对象，共用 一个 方法即可
  // this.write = function(bookName) {
  //   console.log(this, '写了一本书', bookName);
  // }
}

/* 自定义构造函数的：  原型对象
  构造函数.prototype.fnName = function() {...}
  1）prototype 是一种「设计模式」-> 原型模式 
      解决的问题：代码的复用性的问题
  2）构造函数.prototype  ->   它是一个对象， 这个对象叫「原型对象」
  3）构造函数.prototype.fnName 即可向原型对象上，增加新的「方法」或「属性」；
      新增的方法或属性，可被 实例对象 调用/共享。
        注：切记不能：！！！ 构造函数.prototype = {}  ！！！
*/

Author.prototype.write = function(bookName) {
  console.log(this, '写了一本书', bookName);
}
Author.prototype.type = '人类';

const moyan = new Author('莫言', '中国');
// console.log(moyan);
moyan.write();

const bajin = new Author('巴金', '我不知道');
console.log(bajin);


// 思考：实例对象是 如何获取到 原型对象上的 属性 和 方法？
  // 实例对象通过：实例对象.__proto__ 获取到的 原型对象；进而 获取 原型对象上的 属性 和 方法
console.log(bajin.__proto__ === Author.prototype);

</script>